/**
 * 用户服务 - 提供用户管理相关功能
 */

const { User } = require('../models');
const logger = require('../utils/logger');
const { Op } = require('sequelize');

/**
 * 根据ID获取用户
 * @param {number} userId 用户ID
 * @returns {Promise<Object|null>} 用户对象或null
 */
exports.getUserById = async (userId) => {
  try {
    return await User.findByPk(userId, {
      attributes: ['id', 'username', 'email', 'fullName', 'role', 'status', 'lastLoginAt', 'createdAt']
    });
  } catch (error) {
    logger.error(`获取用户信息失败，用户ID: ${userId}`, error);
    throw new Error('获取用户信息失败');
  }
};

/**
 * 获取所有活跃用户
 * @returns {Promise<Array>} 用户列表
 */
exports.getActiveUsers = async () => {
  try {
    return await User.findAll({
      where: { status: 'active' },
      attributes: ['id', 'username', 'email', 'fullName', 'role', 'lastLoginAt']
    });
  } catch (error) {
    logger.error('获取活跃用户列表失败', error);
    throw new Error('获取活跃用户列表失败');
  }
};

/**
 * 获取销售人员列表
 * @returns {Promise<Array>} 销售人员列表
 */
exports.getSalesUsers = async () => {
  try {
    return await User.findAll({
      where: { 
        role: 'sales',
        status: 'active'
      },
      attributes: ['id', 'username', 'email', 'fullName', 'lastLoginAt']
    });
  } catch (error) {
    logger.error('获取销售人员列表失败', error);
    throw new Error('获取销售人员列表失败');
  }
};

/**
 * 更新用户最后活跃时间
 * @param {number} userId 用户ID
 * @returns {Promise<boolean>} 更新结果
 */
exports.updateLastActive = async (userId) => {
  try {
    const user = await User.findByPk(userId);
    if (!user) return false;
    
    await user.update({ lastActive: new Date() });
    return true;
  } catch (error) {
    logger.error(`更新用户最后活跃时间失败，用户ID: ${userId}`, error);
    return false;
  }
};

/**
 * 搜索用户
 * @param {string} query 搜索关键词
 * @returns {Promise<Array>} 匹配的用户列表
 */
exports.searchUsers = async (query) => {
  try {
    if (!query || query.trim() === '') {
      return [];
    }
    
    return await User.findAll({
      where: {
        [Op.or]: [
          { username: { [Op.like]: `%${query}%` } },
          { fullName: { [Op.like]: `%${query}%` } },
          { email: { [Op.like]: `%${query}%` } }
        ],
        status: 'active'
      },
      attributes: ['id', 'username', 'email', 'fullName', 'role']
    });
  } catch (error) {
    logger.error(`搜索用户失败，查询: ${query}`, error);
    throw new Error('搜索用户失败');
  }
}; 